package kr.co.bettersoft.sendme.activity;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import kr.co.bettersoft.sendme.provider.SendMeCertification;
import kr.co.bettersoft.sendme.provider.SendMeInstall;
import kr.co.bettersoft.sendme.provider.SendMeLog;
import kr.co.bettersoft.sendme.provider.SendMeMember;
import kr.co.bettersoft.sendme.provider.SendMeVoice;
import kr.co.bettersoft.sendme.rest.SendMeAudioMessageRest;
import kr.co.bettersoft.sendme.rest.SendMeCertificationRest;
import kr.co.bettersoft.sendme.rest.SendMeInstallRest;
import kr.co.bettersoft.sendme.rest.SendMeLogRest;
import kr.co.bettersoft.sendme.rest.SendMeMemberRest;
import kr.co.bettersoft.sendme.rest.SendMeVersionRest;
import kr.co.bettersoft.sendme.util.SendMeActivityManager;
import kr.co.bettersoft.sendme.util.SendMeCommon;
import kr.co.bettersoft.sendme.util.SendMeConstant;
import kr.co.bettersoft.sendme.activity.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Build.VERSION;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.ContactsContract;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
/**
 * 현재 버전 정보는 로컬 앱정보를 가져오고
 *  최신 버전 정보는 서버에서 받아온다.
 *  
 *  비교후 새 버전을 다운로드 하려면 마켓으로 이동시킨다.
 * @author blue
 *
 */
@SuppressLint("NewApi")
public class SendMeSubSettingsVersionInfoActivity extends Activity {

	public static String TAG = SendMeSubSettingsVersionInfoActivity.class.getSimpleName();


	// 액티비티 매니저를 가져 온다.
	private SendMeActivityManager sendMeActivityManager = SendMeActivityManager.getInstance();

	ImageButton imageButtonTopBack;
	ImageButton imageButtonTopMainMenu;
	
	TextView versionInfoNowVersionTxt;
	TextView versionInfoCurrentVersionTxt;
	Button versionInfoDownloadNewVersionBtn;
	View versionInfoDownloadNewVersionBtn2;
	String appPackageName; 
	String nowVerion = "";
	String currentVersion = "";

	boolean downloadEnable = false;
	

	// 프로그래스바(로딩 표시)
	private ProgressDialog dialog;

	// 사용자 휴대 전화번호.
	private String PHONE_NUMBER = "";


	// 로그를 남긴다
	private static final int THREAD_REGISTER_LOG = 100;

	// 서버에서 최신 버전 정보를 받아온다
	private static final int GET_LAST_RELEASED_VERSION = 104;		

	// 화면에 데이터 세팅
	private static final int SHOW_VERSION_INFO = 105;	

	// 프로그레스 바를 출력 한다.
	private static final int THREAD_PROGRESS_BAR_VISIBLE = 108;

	// 프로그레스 바를 감춘다.
	private static final int THREAD_PROGRESS_BAR_INVISIBLE = 109;


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// 커스텀 타이블 바를 설정 한다.
		Window window = getWindow();
		window.requestFeature(Window.FEATURE_CUSTOM_TITLE);

		setContentView(R.layout.activity_send_me_sub_settings_version_info);

		window.setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar_03);

		// 액티비티 매니저에 담는다.
		sendMeActivityManager.addActivity(this);

		confirmNotification();

		// 뒤로 가기 화살표 버튼을 설정 한다.
				imageButtonTopBack = (ImageButton)findViewById(R.id.imageButtonTopBack);
				imageButtonTopBack.setOnClickListener(new View.OnClickListener() {

					@Override
					public void onClick(View v) {
						// TODO Auto-generated method stub

						Intent intent = new Intent(returnThis(), SendMeSettingsActivity.class);
						startActivity(intent);
						
						// 화면을 닫는다.
						sendMeActivityManager.removeActivity(SendMeSubSettingsVersionInfoActivity.this);
						finish();
					}
				});

				// 타이틀바의 메인 메뉴 버튼을 설정 한다.
				imageButtonTopMainMenu = (ImageButton)findViewById(R.id.imageButtonTopMainMenu);
				imageButtonTopMainMenu.setOnClickListener(new OnClickListener() {

					@Override
					public void onClick(View v) {
						// TODO Auto-generated method stub
						Log.i(TAG, "pressed top main menu.");

						// 메인 메뉴 화면을 출력 한다.
						Intent i = new Intent(SendMeSubSettingsVersionInfoActivity.this, SendMeMainMenuActivity.class);
						startActivity(i);
						
						// 화면을 닫는다.
						sendMeActivityManager.removeActivity(SendMeSubSettingsVersionInfoActivity.this);
						finish();
					}
				});
				
				
		// 버전 표시
		versionInfoNowVersionTxt  = (TextView)findViewById(R.id.versionInfoNowVersionTxt);
		versionInfoCurrentVersionTxt  = (TextView)findViewById(R.id.versionInfoCurrentVersionTxt);
		//				versionInfoCurrentVersionTxt.setText(currentVersion);

		
		versionInfoDownloadNewVersionBtn2 = findViewById(R.id.versionInfoDownloadNewVersionBtn2);
		
		appPackageName = getPackageName(); // getPackageName() from Context or Activity object
		Log.d(TAG,"appPackageName:"+appPackageName);
		
		
		// 다운로드 버튼
		versionInfoDownloadNewVersionBtn  = (Button)findViewById(R.id.versionInfoDownloadNewVersionBtn);
		versionInfoDownloadNewVersionBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				if(downloadEnable){
					Log.d(TAG,"go to download new version");
					// 마켓으로
					try {
						startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));	
					} catch (android.content.ActivityNotFoundException anfe) {
						startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + appPackageName)));
					} finally {
						// 화면을 닫는다.
						sendMeActivityManager.removeActivity(SendMeSubSettingsVersionInfoActivity.this);
						finish();
					}
				}
			}
		});


		// 로깅.
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_REGISTER_LOG));


		// 최신 버전은 서버에서
		mHandler.sendMessage(mHandler.obtainMessage(GET_LAST_RELEASED_VERSION));
	}




	/**
	 * Handler 를 정의 한다.
	 * 모든 Thread 를 등록해 놓고 호출 한다.
	 */
	private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch(msg.what) {
			// 로그를 남긴다
			case THREAD_REGISTER_LOG : 
				threadRegisterLog();
				break; 
				// 최신 버전 정보 가져오기
			case GET_LAST_RELEASED_VERSION : 
				threadGetLastReleasedVersion();
				break;
				// 화면에 세팅
			case SHOW_VERSION_INFO : 
				runOnUiThread(threadShowVersion);
				break;

				// (서버 통신) 프로그레스 바를 출력 한다.
			case THREAD_PROGRESS_BAR_VISIBLE : 
				if(dialog==null){
					dialog = ProgressDialog.show(SendMeSubSettingsVersionInfoActivity.this, "", "", true);	// 제목, 내용
				}else if(!dialog.isShowing()){
					dialog.show();
				}
				break;
				// (서버 통신) 프로그레스 바를 감춘다.
			case THREAD_PROGRESS_BAR_INVISIBLE : 
				dialog.dismiss();
				break;
			}
		}
	};

	public Context returnThis(){
		return this;
	}
	
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 서버 통신
	/**
	 * 최신 릴리즈 버전을 가져 온다.
	 */
	public void threadGetLastReleasedVersion(){

		// 프로그레스 바를 출력 한다.
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_VISIBLE));

		Thread thread = new Thread(new Runnable() {

			public void run() {
				// TODO Auto-generated method stub

				SendMeVersionRest sendMeVersionRest = new SendMeVersionRest();

				String result = sendMeVersionRest.getLastReleasedVersion();
				currentVersion = "v"+result;

				// 결과 처리
				mHandler.sendMessage(mHandler.obtainMessage(SHOW_VERSION_INFO));

				// 프로그레스 바를 숨긴다
				mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_INVISIBLE));
			}
		});
		thread.start();
	}

	/**
	 * 로그를 남긴다	 
	 */
	public void threadRegisterLog() {
		Thread thread = new Thread(new Runnable() {
			public void run() {

				SendMeCommon sendMeCommon = new SendMeCommon();
				String nowTime = sendMeCommon.getCurrentDate();

				SendMeLog sendMeLog = new SendMeLog();
				sendMeLog.setPhoneNumber(PHONE_NUMBER);
				sendMeLog.setViewName(TAG);
				sendMeLog.setRegisterDate(nowTime);

				SendMeLogRest sendMeLogRest = new SendMeLogRest();

				sendMeLogRest.registerLog(sendMeLog);
			}
		});
		thread.start();
	}

	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	/**
	 * 화면에 데이터 세팅
	 */
	private Runnable threadShowVersion = new Runnable() {
		@Override
		public void run() {
			// 결과 처리

			// 현재 버전 정보 가져와서 세팅
			try {
				PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
				nowVerion = "v"+packageInfo.versionName;
				Log.d(TAG,"nowVerion:: "+nowVerion);
			} catch(NameNotFoundException e) { }
			versionInfoNowVersionTxt.setText(nowVerion);

			//			currentVersion = "v1.0.1";		// for test

			// 최신 버전 세팅
			versionInfoCurrentVersionTxt.setText(currentVersion);

			int sdk = android.os.Build.VERSION.SDK_INT;
			if(currentVersion.equals(nowVerion)){
				// 동일함.
				if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
//										versionInfoDownloadNewVersionBtn.setBackgroundColor(Color.parseColor("#ffffff"));
				} else {	
//										versionInfoDownloadNewVersionBtn.setBackgroundColor(Color.parseColor("#ffffff"));
				}
				versionInfoDownloadNewVersionBtn.setText("현재 최신 버전입니다");
				versionInfoDownloadNewVersionBtn.setVisibility(View.GONE);
				versionInfoDownloadNewVersionBtn2.setVisibility(View.VISIBLE);
				downloadEnable = false;
			}else{
				// 다름.
				if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
//					versionInfoDownloadNewVersionBtn.setBackgroundResource(R.drawable.beige_btn_bg);
				} else {
//					versionInfoDownloadNewVersionBtn.setBackgroundResource(R.drawable.beige_btn_bg);
				}
				versionInfoDownloadNewVersionBtn.setText("최신 버전 다운받기");
				versionInfoDownloadNewVersionBtn.setVisibility(View.VISIBLE);
				versionInfoDownloadNewVersionBtn2.setVisibility(View.GONE);
//				versionInfoDownloadNewVersionBtn.setTextColor(Color.parseColor("#ffffff"));
				downloadEnable = true;
			}				

		}
	};







	//	/**
	//	 * 뒤로 가기 버튼을 정의 한다.
	//	 * 설치단계이기 때문에 뒤로가기 버튼을 터치하면 앱을 종료 한다.
	//	 */
		@Override
		public void onBackPressed() {
			Intent intent = new Intent(returnThis(), SendMeSettingsActivity.class);
			startActivity(intent);
			
			// 화면을 닫는다.
			sendMeActivityManager.removeActivity(SendMeSubSettingsVersionInfoActivity.this);
			finish();
		}
	//	
	//	/**
	//	 * 뒤로가기 버튼을 터치하면 alert 창을 띄우고 앱을 종료한다.
	//	 */
	//	private void showDialogSystemExit() {
	//		new AlertDialog.Builder(SendMeSubSettingsVersionInfoActivity.this)
	//		.setTitle("프로그램 종료")
	//		.setMessage("SendMe 를 종료하시겠습니까?")
	//		.setNegativeButton("취소", new DialogInterface.OnClickListener() {
	//
	//			@Override
	//			public void onClick(DialogInterface dialog, int which) {
	//
	//			}
	//		})
	//		.setPositiveButton("확인", new DialogInterface.OnClickListener() {
	//			
	//			@Override
	//			public void onClick(DialogInterface dialog, int which) {
	//				// TODO Auto-generated method stub
	//				sendMeActivityManager.finishAllActivity();
	//			}
	//		}).show();
	//	}

	/**
	 * SharedPreference 정보를 확인 한다.
	 */
	public void confirmNotification() {
		SharedPreferences mSharedPreference = getSharedPreferences(SendMeConstant.SENDME_PREFERENCE, Activity.MODE_PRIVATE);

		PHONE_NUMBER = mSharedPreference.getString("phone_number", "");
	}

}
